﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Datos.Interfaces;
using Datos.Entidades;
using System.Data.SqlClient;
using Datos.Fabricas;
using Datos.Entidades.FabricaEntidades;
using log4net;

namespace Datos.DAOSqlServer
{
  public class DAOSqlServerAccesoRol : IDAOAccesoRol
    {
      IDAOAccesoConexion bd = FabricaConexion.DAOSqlServerAccesoConexion();
      #region Logger
      private static readonly ILog log = LogManager.GetLogger(
      System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);





      #endregion 
      #region Constructor
      public DAOSqlServerAccesoRol()
      {
          log.Info("Conexion DAOSqlAccesoRol");
      }
      #endregion

      /// <summary>
      /// Consultar Roles 
      /// </summary>
      /// <returns>Una lista de roles</returns>
      public List<Entidad> ConsultarRoles()
      {
          SqlCommand command = new SqlCommand();
          List<Entidad> listaRoles = new List<Entidad>();
          try
          {

              bd.AbrirConexionBd();
              command.Connection = bd.ObjetoConexion();
              command.CommandType = System.Data.CommandType.StoredProcedure; //Tipo de comando que se va a ejecutar
              command.CommandText = "[dbo].[SELRoles]"; // Nombre del Procedimiento Almacenado en la Base de Datos
              command.CommandTimeout = 10; //tiempo de verificacion, si tarda mucho la consulta

              SqlDataReader reader = command.ExecuteReader(); // ejecuta el stored procedure

              while (reader.Read())
              {
                  Entidad roles = FabricaEntidades.ObtenerRol();

                  (roles as Rol).NombreRol = reader["Nombre"].ToString();
                  (roles as Rol).Id_Rol = reader.GetInt32(1);
                  listaRoles.Add(roles as Rol);

              }
              reader.Close();
              bd.CerrarConexionBd();
              log.Info("Se realizo la consulta de forma exitosa");
              return listaRoles;


          }

          catch (SqlException)
          {
              log.Error("Error de sql, no se realizo la consulta");
              bd.CerrarConexionBd();
              return null;
          }

          catch (Exception)
          {
              log.Error("Se genero una excepcion");
              bd.CerrarConexionBd();
              return null;
          }

      }
    }
}
